// 给你一个链表的头节点 head ，判断链表中是否有环。
// 如果链表中有某个节点，可以通过连续跟踪 next 指针再次到达，则链表中存在环。
// 为了表示给定链表中的环，评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置（索引从 0 开始）。
// 注意：pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
// import ListNode from "./data_structure/ListNode"

// 快慢指针
var hasCycle = function (head) {
  let slow = fast = null;
  if (head) {
    slow = head.next;
    if (head.next) {
      fast = head.next.next;
    }
  }
  while (slow && fast) {
    if (slow === fast)
      return true;
    else {
      slow = slow.next;
      // 若是不是环，fast走到底继续next next会报错
      try {
        fast = fast.next.next;
      } catch (e) {
        return false;
      }
    }
  }
  return false;
};
function ListNode(val) {
  this.val = val;
  this.next = null;
}
function createLinkList(valArr) {
  let head = new ListNode(valArr[0]);
  let temp = head;
  for (let i = 1; i < valArr.length; i++) {
    let node = new ListNode(valArr[i]);
    temp.next = node;
    temp = node;
  }
  temp.next = head.next;
  return head;
}
// const head = createLinkList([3, 2, 0, -4])
const head = createLinkList([1])
console.log(hasCycle(head));